/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ik.RestauranteBar.SMO.Manejadores;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;
import org.ik.RestauranteBar.SMO.Encapsulados.Pedidos;
import org.ik.RestauranteBar.SMO.Manejadores.Conectores.ConexionMySQL;

/**
 *
 * @author Malkavian
 */
public class ManejadorPedidos extends ConexionMySQL {

    private static ManejadorPedidos manager;

    public static ManejadorPedidos getInstance() {
        if (manager == null) {
            manager = new ManejadorPedidos();
        }
        return manager;
    }

    private ManejadorPedidos() {
    }

    public List<Pedidos> getPedidos() {
        List<Pedidos> clientes = null;

        try {
            Query query = getEntity().createNamedQuery("Pedidos.findAll");
            clientes = query.getResultList();
        } catch (Exception ex) {
        }

        return clientes;
    }

   public int maxPedidos() {

        try {

            Query query = getEntity().createQuery("select MAX(p.idpedido) FROM Pedidos p", int.class);
            int deleted = (int) query.getSingleResult();
            return deleted;
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            return 0;
        }

    }
    
    public Pedidos getPedidosCliente(String telefono) {
        Pedidos cliente = null;

        try {
            Query query = getEntity().createNativeQuery("Pedidos.findByClientesTelefono");
            query.setParameter("clientesTelefono", telefono);
            cliente = (Pedidos) query.getSingleResult();
        } catch (Exception ex) {
        }

        return cliente;
    }

    public List<Pedidos> getPedidosFecha(Date fecha) {
        List<Pedidos> cliente = new ArrayList<Pedidos>();
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Query query = getEntity().createNativeQuery("SELECT * FROM Pedidos WHERE DATE_FORMAT(fechaPedido,'%Y-%m-%d') = ?",Pedidos.class);
            query.setParameter(1, sdf.format(fecha));
            cliente = query.getResultList();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

        return cliente;
    }

    public Pedidos getPedido(String telefono, int idpedido) {
        Pedidos cliente = null;

        try {
            Query query = getEntity().createNativeQuery("SELECT * FROM Pedidos p WHERE p.clientesTelefono = ? AND p.idpedido = ?");
            query.setParameter(1, telefono);
            query.setParameter(2, idpedido);
            cliente = (Pedidos) query.getSingleResult();
        } catch (Exception ex) {
        }

        return cliente;
    }
    
    public Pedidos getPedido(int idpedido) {
        Pedidos cliente = null;

        try {
            Query query = getEntity().createNativeQuery("SELECT * FROM Pedidos p WHERE p.idpedido = ?");
            query.setParameter(1, idpedido);
            cliente = (Pedidos) query.getSingleResult();
        } catch (Exception ex) {
        }

        return cliente;
    }
    
    
    public List<Pedidos> getPedido(String nombre, String apellido) {
        List<Pedidos> cliente = null;

        try {
            Query query = getEntity().createNativeQuery("SELECT * FROM pedidos p, clientes c WHERE p.Clientes_Telefono = c.Telefono AND c.Nombre = ? AND c.Apellido = ?");
            query.setParameter(1, nombre);
            query.setParameter(2, apellido);
            cliente = query.getResultList();
        } catch (Exception ex) {
        }

        return cliente;
    }

    public int maxPedidosPorCliente(String telefono) {

        try {

            Query query = getEntity().createNativeQuery("select MAX(idpedido) FROM Pedidos where Clientes_Telefono = ?");
            query.setParameter(1, telefono);
            Object deleted = query.getSingleResult();
            return Integer.parseInt(deleted.toString());
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            return 0;
        }

    }

    public Boolean insertarPedidos(Pedidos cliente) {

        try {

            getEntity().getTransaction().begin();
            getEntity().persist(cliente);
            getEntity().getTransaction().commit();
            return true;

        } catch (Exception ex) {

            return false;
        }

    }

    public Boolean actualizarPedidos(Pedidos cliente) {

        try {

            getEntity().getTransaction().begin();
            getEntity().merge(cliente);
            getEntity().getTransaction().commit();
            return true;

        } catch (Exception ex) {

            return false;
        }

    }
}